/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.apps.dashclock;
import com.google.android.apps.dashclock.api.DashClockExtension;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import java.net.URISyntaxException;
import static com.google.android.apps.dashclock.LogUtils.LOGE;
/**
* A basic proxy activity for handling widget clicks.
*/
public class WidgetClickProxyActivity extends Activity {
private static final String TAG = LogUtils.makeLogTag(WidgetClickProxyActivity.class);
/**
* If present, the component name of the extension to update upon being clicked.
*/
private static final String EXTRA_UPDATE_EXTENSION
= "com.google.android.apps.dashclock.extra.UPDATE_EXTENSION";
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus) {
if (getIntent().hasExtra(EXTRA_UPDATE_EXTENSION)) {
// Update extensions
Intent extensionUpdateIntent = new Intent(this, DashClockService.class);
extensionUpdateIntent.setAction(DashClockService.ACTION_UPDATE_EXTENSIONS);
extensionUpdateIntent.putExtra(DashClockService.EXTRA_COMPONENT_NAME,
getIntent().getStringExtra(EXTRA_UPDATE_EXTENSION));
// TODO: new flag for UPDATE_REASON_CLICKED
extensionUpdateIntent.putExtra(DashClockService.EXTRA_UPDATE_REASON,
DashClockExtension.UPDATE_REASON_PERIODIC);
startService(extensionUpdateIntent);
}
try {
startActivity(
Intent.parseUri(getIntent().getData().toString(), Intent.URI_INTENT_SCHEME)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_TASK_ON_HOME
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_FORWARD_RESULT));
} catch (URISyntaxException e) {
LOGE(TAG, "Error parsing URI.", e);
} catch (ActivityNotFoundException e) {
LOGE(TAG, "Proxy'd activity not found.", e);
} catch (SecurityException e) {
LOGE(TAG, "Don't have permission to launch proxy'd activity.", e);
}
finish();
}
super.onWindowFocusChanged(hasFocus);
}
public static Intent wrap(Context context, Intent intent) {
return wrap(context, intent, null);
}
public static Intent wrap(Context context, Intent intent, ComponentName alsoUpdateExtension) {
return new Intent(context, WidgetClickProxyActivity.class)
.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)))
.putExtra(EXTRA_UPDATE_EXTENSION, (alsoUpdateExtension == null)
? null
: alsoUpdateExtension.flattenToString())
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
}
public static Intent getTemplate(Context context) {
return new Intent(context, WidgetClickProxyActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
}
public static Intent getFillIntent(Intent clickIntent) {
return getFillIntent(clickIntent, null);
}
public static Intent getFillIntent(Intent clickIntent, ComponentName alsoUpdateExtension) {
return new Intent()
.setData(Uri.parse(clickIntent.toUri(Intent.URI_INTENT_SCHEME)))
.putExtra(EXTRA_UPDATE_EXTENSION, (alsoUpdateExtension == null)
? null
: alsoUpdateExtension.flattenToString());
}
}